public class MaxArea {

    public static void main(String[] args) {
        int[] height = {1, 2, 1};
        int i = maxAreaMethod2(height);
//        int i = maxAreaMethod(height);
        System.out.println(i);
    }

    /**
     * 解题： 1. 遍历获取全部的容量，找到最大的
     * 超时
     *
     * @param height 高度
     * @return int
     */
    public static int maxAreaMethod(int[] height) {
        int max = 0;
        for (int i = 0; i < height.length - 1; i++) {
            for (int j = i + 1; j < height.length; j++) {
                if (max < ((j - i) * Math.min(height[i], height[j]))) {
                    max = (j - i) * Math.min(height[i], height[j]);
                }
            }
        }
        return max;
    }

    /**
     * 解题： 2. 双指针法，左右双开舍去最低的
     *
     * @param height 高度
     * @return int
     */
    public static int maxAreaMethod2(int[] height) {
        int max = 0;
        for (int i = 0, j = height.length - 1; i < j; ) {
            int minHeight = height[i] < height[j] ? height[i++] : height[j--];
            max = Math.max(max, (j - i + 1) * minHeight);
        }
        return max;
    }
}
